<!DOCTYPE html>
<html>
<head>
	<title></title>
	<link rel="stylesheet" type="text/css" href="../公用CSS文件/all.css" />
	<meta charset="utf-8">
	<script type="text/javascript" src="../js/jquery.min.js"></script> 	<script type="text/javascript" src="../js/js.js"></script>
</head>
</head>
<body>
<div class="dt">Smarty概念</div>
<ul>
	<li>Smarty是一种基于php所写的模板引擎，目的是实现前后端共同开发，最大的显著作用是增加前端页面代码的可读性和降低前后端协作的难度，过去前端仅负责页面而完全不懂后端的大形势促成了Smarty的产生</li>
<!-- 	<li>Smarty的工作原理是将模板页面以类似file_get_contents的方式在PHP中载入并将模板标签解析为php代码，调用Smarty视图后，分配的变量将在模板混编文件中被定义，混编文件生成后，如果相应生成混编文件的模板和PHP页面没有修改(通过判断文件修改时间元信息-混编文件就记录了文件生成信息)，调用该入口PHP文件，Smarty直接加载混编文件，加载完成后后面的代码将会停住</li>
	<li>Smarty生成的混编文件本质上仍然是一个php文件，因为只有最后一个点号后面才是真正的后缀名，而几乎所有的模板语言都是Smarty这套逻辑，因为原理简单实现也简单，所以作者做了丧心病狂的烟雾使人搞不清楚,smarty其实是一套很垃圾的模板</li> -->
</ul>

<div class="dt">Smarty使用一般流程</div>
<ul>
	
	<div class="ltable showimg">PHP文件</div>
	<div class="img">
		<img src="img/Smarty使用.png">
	</div>

	<div class="ltable showimg">模板文件</div>
	<div class="img">
		<li>使用Smarty定义的标签输出PHP文件分配的变量</li>
	</div>

</ul>


<div class="dt">Smarty类常用方法</div>
<ul>
	

	<div class="ltable showimg">Smarty类中所有方法都是public的访问权限，且使用驼峰式命名</div>
	<div class="img">
		<table>
			<tr>
				<th>方法</th><th>作用</th><th>参数</th><th>备注</th>
			</tr>
			<tr>
				<td>setTemplateDir</td><td>设置模板所在目录</td><td>模板目录路径</td><td>Smarty中强行需要设置模板目录才能display模板而不能直接指定模板路径</td>
			</tr>
			<tr>
				<td>assign</td><td>向模板分配变量</td><td>string变量名 &nbsp;&nbsp;值</td><td>该语句会在混编文件中生成一个定义变量的语句</td>
			</tr>
			<tr>
				<td>display</td><td>调用模板页面</td><td>相对于模板目录的模板文件路径</td><td></td>
			</tr>
		</table>
		
	</div>

	<div class="ltable showimg">Smarty常用属性</div>
	<div class="img">
		<table>
			<tr>
				<th>属性</th><th>意义</th>
			</tr>
			<tr>
				<td>left_delimiter</td><td>模板语法开始标记，默认为'{'</td>
			</tr>
			<tr>
				<td>right_delimiter</td><td>模板语言结束标记，默认为'}'</td>
			</tr>
		</table>
	</div>
	
</ul>

<div class="dt">Smarty模板标签</div>
<ul>
	
	<div class="ltable showimg">简单输出和处理</div>
	<div class="img">
		<table>
			<tr>
				<th>示范</th><th>说明</th><td>备注</td>
			</tr>
			<tr>
				<td>{$a}</td><td>输出变量--解析为PHP的echo 变量</td><td>无法使用原生的echo多变量的语法</td>
			</tr>
			<tr>
				<td>{$a[0]}</td><td>输出数组的单个元素，当然也可以输出关联key</td><td>该种语法无法输出超级全局变量的值</td>
			</tr>
			<tr>
				<td>{$a.0}</td><td>Smarty自己定义的语法，效果和{$a[0]}一致</td><td>该种语法无法输出超级全局变量的值</td>
			</tr>
			<tr>
				<td>{$Smarty.session.name}</td><td>输出session中的某个值</td><td>因为混编文件其实也是PHP文件，所以超级全局变量都能访问，但是作者恶意屏蔽了一些语法输出</td>
			</tr>
			<tr>
				<td>{$Smarty.cookies.name}</td><td>输出cookie中的某个值</td><td>千万记得是cookies，至于为什么没有sessions还是问候作者比较好</td>
			</tr>
		</table>
		<li>输出其他全局变量基本规则都是全转化为小写并过滤掉下划线，这样$smarty.改造后的变量名就能解析为对应的超级全局变量，如$smarty.server就能解析为$_SERVER，然后就能使用上述的语法</li>

	</div>


	<div class="ltable showimg">foreach标签</div>
	<div class="img">
		<img src="img/foreach标签.png">
	</div>

	<div class="ltable showimg">for标签</div>
	<div class="img">
		<img src="img/for标签.png">
	</div>

	<div class="ltable showimg">include标签</div>
	<div class="img">
		<img src="img/include标签.png">
	</div>

</ul>


<div class="dt">Smarty运算符号</div>
<ul>
	<li>eq，等同于平常编程语言中的==<mark>好像还必须这样写</mark></li>
	<li>lt，等同于&lt;，lte，&lt;=</li>
	<li>gt，等同于&gt;，gte，&gt;=</li>
</ul>

<div class="dt">变量调节器（在模板的变量名后面加入'|调节器的名称'，作用是操作变量的数据）</div>
<ul>
	<li>时间戳 内置函数 $Smarty.now|date_format:"%Y-%m-%d %H:%M:%S"  Y表示年份,m表示月份,d表示日期,H表示小时，M表示分钟，S表示秒数</li>
	<li>$Smarty.now，Smarty变量，指向当前时间（时间戳格式）</li>
	<li>字符串截取长度   格式: 字符串变量|truncate:长度:"被替代的字符"  注意：截取后替代显示的字符，该字符长度会被计算到截取长度内(默认是小点)</li>
	<li><mark>虽然Smarty增加了这些功能，但其实界定符还可以写php函数，可以使用php函数进行这些操作</mark></li>
</ul>


</body>
</html>